﻿//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Net;
//using System.Net.Sockets;
//using System.Text;
//using System.Threading;
//using System.Threading.Tasks;

//namespace DriveManage.Tightening
//{
//    class SocketClient
//    {
//        #region variable
//        public Socket _socket = null;
//        public EndPoint endPoint = null;
//        public bool _isConnected = false;
//        public string msg = "";
//        static byte[] buffer = new byte[2048];

//        SocketClient _scm = null;

//        public delegate void OnConnectedHandler();
//        public event OnConnectedHandler OnConnected;
//        public event OnConnectedHandler OnFaildConnect;
//        public delegate void OnReceiveMsgHandler(byte[] bytes);
//        public event OnReceiveMsgHandler OnReceiveMsg;
//        public delegate void connectErrorHandler(string err);
//        public event connectErrorHandler OnConnectError;
//        #endregion

//        public SocketClient(string ip, int port)
//        {
//            IPAddress _ip = IPAddress.Parse(ip);
//            endPoint = new IPEndPoint(_ip, port);
//            _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//        }

//        public void Start()
//        {

//            _socket.BeginConnect(endPoint, ConnectedCallback, _socket);
//            _socket.ReceiveTimeout = 2000;
//            _socket.SendTimeout = 2000;
//        }
//        public void Disconnect()
//        {
//            if (_socket != null)
//            {
//                if (_socket.Connected)
//                {
//                    _socket.Shutdown(SocketShutdown.Both);
//                    _socket.Disconnect(true);
//                }
//                _socket.Close();
//            }
//            _socket = null;
//            _isConnected = false;
//        }
//        public void ReceiveCallback(IAsyncResult ar)
//        {
//            try
//            {
//                Socket ts = (Socket)ar.AsyncState;
//                int length = 0;
//                if (ar != null)
//                {
//                    length = ts.EndReceive(ar);
//                    ar.AsyncWaitHandle.Close();
//                }

//                if (buffer != null)
//                {
//                    //msg = Encoding.ASCII.GetString(buffer).Replace("\0", "");
//                    //将buffer转换为实际接收到的数据，保存到byte数组里
//                    byte[] bytes = new byte[length];
//                    for (int i = 0; i < length; i++)
//                    {
//                        bytes[i] = buffer[i];
//                    }

//                    if (this.OnReceiveMsg != null)
//                    {
//                        OnReceiveMsg(bytes);
//                    }
//                }

//                buffer = new byte[2048];
//                _socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, ReceiveCallback, ts);
//            }
//            catch (SocketException ex)
//            {
//                if (OnConnectError != null) OnConnectError(ex.ToString());
//                Disconnect();
//            }
//        }
//        public void ConnectedCallback(IAsyncResult ar)
//        {
//            Socket socket = ar.AsyncState as Socket;
//            if (socket.Connected)
//            {
//                try
//                {
//                    socket.EndConnect(ar);
//                    _isConnected = true;
//                    if (this.OnConnected != null) OnConnected();

//                    _socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, ReceiveCallback, socket);
//                }
//                catch (SocketException ex)
//                {
//                    if (OnConnectError != null) OnConnectError(ex.ToString());
//                    Disconnect();
//                }
//            }
//            else
//            {
//                Disconnect();
//                if (this.OnFaildConnect != null) OnFaildConnect();
//            }
//        }
//        public void SendMsg(string sendMsg)
//        {
//            try
//            {
//                if (_socket == null)
//                {
//                    return;
//                }
//                byte[] sendBuffer = Encoding.ASCII.GetBytes(sendMsg);
//                _socket.Send(sendBuffer);
//            }
//            catch (SocketException ex)
//            {
//                if (OnConnectError != null) OnConnectError(ex.ToString());
//                Disconnect();
//            }
//        }

//        public void SendMsgZF(byte[] sendBuffer)
//        {
//            try
//            {
//                _socket.Send(sendBuffer);
//            }
//            catch (SocketException ex)
//            {
//                if (OnConnectError != null) OnConnectError(ex.ToString());
//                Disconnect();
//            }
//        }
//    }
//}
